package com.zhanghe.study.study_scala.oop

/**
 * @author zh
 * @date 2021/5/7 10:14
 */
object TestImplicit {
  def main(args: Array[String]): Unit = {

    import com.zhanghe.study.study_scala.oop.TestImplicit.f1
    var i:Int = 2.0
    println(i)


    // 隐式值
    implicit val str1 :String = "jjj"

    // 由于没有给隐式变量赋值，所以该name使用的是str1
    // 如果该作用域下没有隐式值，编译会报错
    hello

    def hello(implicit name:String): Unit = {
      println(s"hello $name")
    }

    implicit class RMB(money: Money) {
      def addSuffix()= {
        money.suffix = "元"
      }
    }

    val money = new Money
    // 可以直接调用隐式类中的方法
    money.addSuffix()

  }

  // 隐式函数  将Double自动转化为Int
  implicit def f1(d:Double): Int ={
    d.toInt
  }


  class Money {
    var suffix = ""
  }


}
